// "Copyright [2021] <Copyright Shengkai Lin>"

#ifndef CLUSTER_NETWORK_CONTROLLER_TOPO_MANAGER_TOPO_MANAGER_H_
#define CLUSTER_NETWORK_CONTROLLER_TOPO_MANAGER_TOPO_MANAGER_H_

#include <string>
#include "cluster/basic/ai_sim.h"
#include "cluster/basic/topology.h"

namespace ai_sim {

class TopoManager : public omnetpp::cSimpleModule{
 private:
    // Use the class cTopology to manage the resource in the network.
    // The data_plane_topo is used to discover the route
    Topology data_plane_topo;
    // The workers_topo is used to manage the sensitive resources
    // for example gpus.
    Topology workers_topo;
    // Manage the control plane
    Topology control_task_topo;
    // Manage sdn plane
    Topology control_sdn_topo;

 public:
    void initialize() override;
    Topology * getDataplaneTopo();
    Topology * getWorkersTopo();
    Topology * getControlTaskTopo();
    Topology * getControlSdnTopo();
    Topology::Node* getNodeinTopo(
       Topology::Node*, Topology*);
};
}  // namespace ai_sim


#endif  // CLUSTER_NETWORK_CONTROLLER_TOPO_MANAGER_TOPO_MANAGER_H_
